package com.hy.proxy.core.entity;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import com.hy.proxy.common.CipherUtils;
import com.hy.proxy.common.JsonUtils;
import lombok.Data;

import java.io.Serializable;

/**
 * @Author: hy
 * @Date: Created in 2019/9/20/19:25
 * @Description:
 * @Version: 1.0
 */
@Data
public class V2ray extends Proxy implements Serializable {

    /**
     * 不知道是干什么的。。。
     */
    @Expose
    private String v = "2"; // auto.freev2.top 是 int类型的

    /**
     * 别名
     */
    @Expose
    private String ps = "IrisHhhhhhhy";

    /**
     * 地址
     */
    @Expose
    private String add;

    /**
     * 端口
     */
    @Expose
    private String port;

    /**
     * 用户ID
     */
    @Expose
    private String id;

    /**
     * 额外ID
     */
    @Expose
    private String aId = "0"; // auto.freev2.top 额外ID是 int类型的

    /**
     * 传输协议
     */
    @Expose
    private String net;

    /**
     * 加密方式（V2链接解密后都没有该属性，应该都是使用默认的 auto）
     */
    @Expose(serialize = false)
    private String security = "auto";

    /**
     * 路径
     */
    @Expose
    @SerializedName(value = "path", alternate = {"file"}) // auto.freev2.top 路径为 file
    private String path;

    /**
     * 底层传输安全协议
     */
    @Expose
    private String tls;

    /**
     * 伪装域名
     */
    @Expose
    private String host;

    /**
     * 伪装类型
     */
    @Expose
    private String type = "none";

    /**
     * V2ray地址
     */
    @Expose(serialize = false)
    private String url;




//    public static void main(String[] args) {
//
//        String a = "ew0KICAidiI6ICIyIiwNCiAgInBzIjogIuaXpeacrEEv5peg6ZmQL1dzL+inhumikSIsDQogICJhZGQiOiAidjcucWxvbHAubWwiLA0KICAicG9ydCI6ICI0NDMiLA0KICAiaWQiOiAiNGVlZjQ3MGYtNmUzNC00YjdlLWI2MDItM2E2YjVmZjY5MDYzIiwNCiAgImFpZCI6ICI4IiwNCiAgIm5ldCI6ICJ3cyIsDQogICJ0eXBlIjogIm5vbmUiLA0KICAiaG9zdCI6ICJ2Ny5xbG9scC5tbCIsDQogICJwYXRoIjogIi9mZjEyMyIsDQogICJ0bHMiOiAidGxzIg0KfQ==";
//
//
//        byte[] decode = Base64.getDecoder().decode(a);
//
//        System.out.println(new String(decode));
//
//        V2ray v = GsonUtils.getGson().fromJson(new String(decode), new TypeToken<V2ray>() {
//        }.getType());
//        System.out.println(v.toString());
//    }

    public String getUrl() {
        if (url == null || "".equals(url)) {
            String v2Json = JsonUtils.getGson().toJson(this);
            return "vmess://" + CipherUtils.BASE64.encoder(v2Json.toLowerCase());
        }

        return url;
    }
}
